数学模型

Wang Haihua

🍈 🍉🍊 🍋 🍌


酵母菌增长

问题

下表的数据是从测量酵母培养物增长的实验收集而来的,请建立数学模型,模拟酵母培养物的增长过程。

时刻/小时 0 1 2 3 4 5 6 7 8 9
生物量/克 9.6 18.3 29.0 47.2 71.1 119.1 174.6 257.3 350.7 441.0
时刻/小时 10 11 12 13 14 15 16 17 18
生物量/克 513.3 559.7 594.8 629.4 640.8 651.1 655.9 659.6 661.8

分析

记表中的第 $k$ 小时的酵母生物量为 $x_{k}(k=0,1, \cdots, 18)$ 克。为了构建数学模型, 首先绘制 $x_{k}$ 关于 $k$ 的散点图。观测 $x_{k}$ 关于 $k$ 的散点图, 可以发现 $x_{k}$ 关于 $k$ 的散点沿 $\mathrm{S}$ 型曲线分布, $x_{k}$ 随着 $k$ 单调增加, $x_{k}$ 可能趋于 稳定值。因而我们选择离散 Logistic 模型研究酵母生物量的变化趋势。

模型的建立与求解

根据上述问题分析, 我们选择离散 Logistic 模型 $$ x_{k+1}=x_{k}+r x_{k}\left(1-\frac{x_{k}}{N}\right), \quad k=0,1,2, \cdots $$ 其中, $r$ 为固有增长率, $N$ 为系统最大容量。

要求解模型, 需要先拟合模型中的末知参数 $r, N$, 我们使用最小二乘法拟合参数 $r, N$ 。首先把上式式改写为 $$ r x_{k}-s x_{k}^{2}=x_{k+1}-x_{k}, $$ 其中, $s=r / N$ ,把已知的 19 个观测值代入 (13.24) 式,得到关于 $r, s$ 的超定线性方程组

$$ \left[\begin{array}{cc} x_{0} & -x_{0}^{2} \\ x_{1} & -x_{1}^{2} \\ \vdots & \vdots \\ x_{17} & -x_{17}^{2} \end{array}\right]\left[\begin{array}{c} r \\ s \end{array}\right]=\left[\begin{array}{c} x_{1}-x_{0} \\ x_{2}-x_{1} \\ \vdots \\ x_{18}-x_{17} \end{array}\right], $$

利用 Python 软件, 求得 $r=0.5577, s=0.00085, N=654.0487$ 。 已知原始数据和拟合值对比如图下图:

检验与评价

经检验模型对已知点预测的最大相对误差为31.47%,也就是中间数据点的预测值的偏差有点大,模型还有进一步改进的必要。

离散Logistic模型不仅可以应用于酵母培养物的变化趋势研究,还可以应用于其他具有S型变化趋势的种群问题。

代码

import numpy as np
from matplotlib.pyplot import rc, plot, show, legend, figure
rc('font',size=16); rc('font',family='SimHei')
a=np.loadtxt("Pdata13_6.txt"); 
plot(np.arange(0,19),a,'*'); show()
b=np.c_[a[:-1],-a[:-1]**2]
c=np.diff(a); x=np.linalg.pinv(b).dot(c)
r=x[0]; N=x[0]/x[1]
print("r,s,N的拟合值分别为:",r,'\t',x[1],'\t',N)

Tx=np.zeros(19); Tx[0]=9.6; x0=9.6
for i in range(1,19):
    xn=x0+r*x0*(1-x0/N)
    Tx[i]=xn; x0=xn
figure; plot(np.arange(0,19),a,'*')
plot(np.arange(19), Tx,'o-')
legend(("原始数据点","拟合值"), loc='best'); show()
delta=np.abs((Tx-a)/a);
print("所有已知点的预测值的相对误差",delta)
print("最大相对误差:",delta.max())

参考资料